package com.cxt.utils;

/**
 * 坐标距离计算工具类
 */
public class DistanceUtil {
    
    /**
     * 计算两点之间直线距离（平面坐标系）
     * @param x1 起点X坐标
     * @param y1 起点Y坐标
     * @param x2 终点X坐标
     * @param y2 终点Y坐标
     * @return 两点间直线距离（单位：米）
     */
    public static double calculateDistance(double x1, double y1, double x2, double y2) {
        double dx = x2 - x1;
        double dy = y2 - y1;
        return Math.sqrt(dx * dx + dy * dy);
    }
    
    /**
     * 计算两点之间直线距离（经纬度坐标系）
     * @param lat1 起点纬度
     * @param lon1 起点经度 
     * @param lat2 终点纬度
     * @param lon2 终点经度
     * @return 两点间直线距离（单位：米）
     */
    public static double calculateDistanceByLonLat(double lat1, double lon1, double lat2, double lon2) {
        final int R = 6371; // 地球半径（公里）
        double latDistance = Math.toRadians(lat2 - lat1);
        double lonDistance = Math.toRadians(lon2 - lon1);
        double a = Math.sin(latDistance / 2) * Math.sin(latDistance / 2)
                + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
                * Math.sin(lonDistance / 2) * Math.sin(lonDistance / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        return R * c * 1000; // 转换为米
    }
}